import request from '@/utils/request';
import type { BaseBeanModel, ResponsePageData, ResponseBaseData, QueryParamModel } from '@/api/model/baseModel';
import type { downloadParam } from '@/utils/download-util';
import { downloadSysFile } from '@/utils/download-util';
const basePath = '/appsys/user';
/** 系统用户表 */
export interface SysUserDto extends BaseBeanModel {
  /** 用户编号 */
  no?: string;
  /** 登录名 */
  loginName?: string;
  /** 用户姓名 */
  name?: string;
  /** 状态 1:正常的用户状态3:无效用户状态 */
  status?: string;
  /** 密级 */
  secretLevel?: any;
  /** 性别 */
  sex?: string;
  /** 手机 */
  mobile?: string;
  /** 邮件 */
  email?: string;
  /** 职称 */
  title?: string;
  /** 前后台 0:后台用户 1:前台用户 */
  consoleType?: string;
  /** 类型 0:实体用户 1:虚拟用户 */
  type?: string;
  /** 照片 */
  photo?: string;
  /** 排序 */
  orderBy?: number;
  /** 语言 */
  languageCode?: string;
  /** 集团编码 */
  unitCode?: string;
  /** 政治面貌 */
  polity?: any;
  /** 工作日期 */
  workDate?: any;
  /** 生日 */
  birthday?: any;
  /** 学历 */
  degree?: any;
  /** 毕业学校 */
  education?: string;
  /** 办公电话 */
  officeTel?: string;
  /** 民族 */
  nation?: any;
  /** 签名 */
  sign?: string;
  /** 传真 */
  fax?: string;
  /** 工作地点 */
  workSpace?: string;
  /** 房间号 */
  roomNo?: string;
  /** 家庭地址 */
  homeAddress?: string;
  /** 家庭邮编 */
  homeZip?: string;
  /** 家庭电话 */
  homeTel?: string;
  /** 英文名 */
  nameEn?: string;
  /** 其他 */
  remark?: string;
  /** 籍贯 */
  birthAddress?: string;
  /** 锁定状态 0:没有锁定 1：密码超时没修改锁定 2：输错次数过多被锁定，超时自动解锁 3：完全锁定 */
  userLocked?: string;
  /** 用户姓名全拼和简拼 */
  userPinyin?: string;
  /** 部门id */
  deptId?: string;
  /** 部门名称 */
  deptName?: string;
  /** 岗位id */
  positionId?: string;
  /** 岗位名称 */
  positionName?: string;
  /** 角色id */
  ruleId?: string;
  /** 角色名称 */
  ruleName?: string;
  /** 是否主管 */
  isManager?: string;
  /** 有无效状态 */
  statusText?: string;
}

/**
 * 获取分页数据
 * @param parentId 父节点id
 * @param nodeType 父节点类型
 * @param param 分页参数
 * @returns 数据列表
 */
export function listSysUserByPage(
  parentId: string,
  nodeType: string,
  param: QueryParamModel
): Promise<ResponsePageData<SysUserDto>> {
  return request.post(`${basePath}/searchByPage/v1?parentId=${parentId}&nodeType=${nodeType}`, param);
}

/**
 * 根据id加载数据
 * @param id 表单id
 * @returns 表单数据
 */
export function getSysUser(id: string): Promise<ResponseBaseData<SysUserDto>> {
  return request.get(`${basePath}/UserRest/get/${id}/v1`);
}

/**
 * 保存表单数据
 * @param form 表单数据
 * @returns 保存结果
 */
export function saveSysUser(form: SysUserDto): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/save/v1`, form);
}

/**
 * 更新表单数据
 * @param form 表单数据
 * @returns 更新结果
 */
export function updateSysUser(form: SysUserDto): Promise<ResponseBaseData<any>> {
  return request.put(`${basePath}/update-sensitive/v1`, form);
}

/**
 * 根据id集合删除数据
 * @param ids id集合
 * @returns 删除结果
 */
export function delSysUser(ids: string[]): Promise<ResponseBaseData<any>> {
  return request.delete(`${basePath}/deleteByIds/v1`, { data: ids });
}

/**
 * 导出Excel
 * @param param 导出参数
 * @returns 导出文件
 */
export function exportExcel(param: any) {
  const download = {
    url: `${basePath}/UserRest/exportServerData/v1`,
    data: param,
    method: 'post'
  } as downloadParam;
  return downloadSysFile(download);
}

/** 获取用户editType */
export function getSysUserEditType(): Promise<ResponseBaseData<any>> {
  return request.get(`${basePath}/UserRest/get-edit-type/v1`, null);
}

/**
 * 重置密码
 * @param ids 用户id集合
 * @returns 重置结果
 */
export function resetPassword(ids: string[]): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/resetPassword/v1`, ids);
}

/**
 * 修改密码
 * @param userId 用户id
 * @param newPassword 新密码
 * @returns 修改结果
 */
export function changePassword(userId: string, newPassword: string): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/changePasswordByAdmin/${userId}/v1`, newPassword);
}

/** 密码全部重置 */
export function resetAllPassword(): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/resetAllPassword/v1`, null);
}

/**
 * 解锁用户
 * @param ids 用户id集合
 * @returns 解锁结果
 */
export function unLockSysUser(ids: string[]): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/doUnLockSysUser/v1`, ids);
}

/**
 * 获取用户锁定日志
 * @param userId 用户id
 * @param param 分页数据
 * @returns 用户锁定日志列表数据
 */
export function getUserLockLog(userId: string, param: QueryParamModel): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/getUserLockLog/${userId}/v1`, param);
}

/**
 * 用户状态有无效设置
 * @param ids 用户id集合
 * @returns 设置结果
 */
export function updateValidflags(ids: string): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/updateValidflags/v1`, ids);
}

/**
 * 初始化用户拼音
 * @param ids 用户id集合
 * @returns 初始化结果
 */
export function initUserPinYin(ids: string[]): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/initUserPinYin/v1`, ids);
}

/**
 * 获取用户兼职部门
 * @param userId 用户id
 * @returns 用户兼职部门列表数据
 */
export function getMapDept(userId: string): Promise<ResponseBaseData<any>> {
  return request.get(`${basePath}/getMapDept/${userId}/v1`);
}

/**
 * 保存用户兼职部门
 * @param userId 用户id
 * @param param 兼职部门数据
 * @returns 保存结果
 */
export function saveMapDept(userId: string, param: any): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/saveMapDept/${userId}/v1`, param);
}

/**
 * 根据id集合删除用户兼职部门
 * @param ids id集合
 * @returns 删除结果
 */
export function deleteMapDept(ids: string): Promise<ResponseBaseData<any>> {
  return request.delete(`${basePath}/deleteMapDept/v1`, { data: ids });
}

/**
 * 获取用户密级
 * @param userId 用户id
 * @returns 用户密级列表数据
 */
export function getSysUserSecrets(userId: string): Promise<ResponseBaseData<any>> {
  return request.get(`${basePath}/UserRest/getSysUserSecrets/${userId}/v1`);
}

/** 获取多组织应用列表 */
export function getMultiorgList(): Promise<ResponseBaseData<any>> {
  return request.get(`${basePath}/multiorg/list/org`);
}

/**
 * 保存用户密级
 * @param userId 用户id
 * @param param 密级数据
 * @returns 保存结果
 */
export function saveUserOrgSecrets(userId: string, param: any): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/UserRest/saveUserOrgSecrets/${userId}/v1`, param);
}

/**
 * 根据id集合删除密级
 * @param ids id集合
 * @returns 删除结果
 */
export function deleteSysUserSecretByIds(ids: string): Promise<ResponseBaseData<any>> {
  return request.delete(`${basePath}/deleteSysUserSecretByIds/v1`, { data: ids });
}

/**
 * 获取用户角色列表
 * @param userId 用户id
 * @returns 用户角色列表数据
 */
export function getMapUserRole(userId: string): Promise<ResponseBaseData<any>> {
  return request.get(`${basePath}/getMapUserRole/${userId}/v1`);
}

/**
 * 根据id集合删除角色
 * @param ids id集合
 * @returns 删除结果
 */
export function deleteUserRoleAuthByIds(ids: string): Promise<ResponseBaseData<any>> {
  return request.delete(`${basePath}/deleteUserRoleAuthByIds/v1`, { data: ids });
}

/**
 * 保存角色列表
 * @param userId 用户id
 * @param param 角色列表数据
 * @returns 保存结果
 */
export function saveMapRole(userId: string, param: any): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/saveMapRole/${userId}/v1`, param);
}

/**
 * 批量调整角色
 * @param param 调整数据
 * @returns 调整结果
 */
export function addAdjustmentRole(param: any): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/UserRest/addAdjustmentRole/v1`, param);
}

/**
 * 批量调整部门
 * @param param 调整数据
 * @returns 调整结果
 */
export function addAdjustmentDept(param: any): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/UserRest/addAdjustmentDept/v1`, param);
}

/**
 * 获取用户菜单权限
 * @param userId 用户id
 * @returns 用户菜单权限结果
 */
export function getUserPermissionsResources(userId: string): Promise<ResponseBaseData<any>> {
  return request.get(`/appsys/permissionsmenu/PermissionsMenuRest/getUserPermissionsResources/${userId}/v1`);
}

/**
 * 激活密码
 * @param ids 用户id集合
 * @returns 激活结果
 */
export function activePassword(ids: string[]): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/UserRest/activePassword/v1`, ids);
}
